/*
 * gpioAansturen.cpp
 *
 *  Created on: Oct 30, 2012
 *      Author: bernard
 */
#include <stdio.h>
#include <fcntl.h>
#include <string.h>
#include <unistd.h>
#include <sstream>

#include "gpio.h"

using namespace std;

char s_out[] = "out";
char s_0[] = "0";
char s_1[] = "1";
int s_gpio;
int fd;

GPIO::GPIO() {
}


GPIO::~GPIO() {
}

void GPIO::InstallOutput(int gpio)
{
	s_gpio = gpio;
	// maak van s_gpio een string portNumber
	stringstream converter;
	converter << s_gpio;
	string portNumber = converter.str();

	// maak een portPath
	string portPath = "/sys/class/gpio/gpio";
	portPath.append(portNumber);
	portPath.append("/direction");

	// Maak van portPath een char port
	char *port = (char*)portPath.c_str();

	// open port
	if((fd=open(port,O_RDWR))<0)
	{
			printf("Promblem: open \n\r");
	}
	else
	{
			// make port Out
			if(write(fd,s_out,strlen(s_out))<0)
			{
					printf("Promblem: write \n\r");
			}
			// close port
			if(close(fd)<0)
			{
					printf("Promblem: close \n\r");
			}
	}
	close(fd);
}

void GPIO::PortHigh(int gpio)
{
	PortOpen(gpio);
	write(fd, s_1, strlen(s_1));
	close(fd);
}
void GPIO::PortLow(int gpio)
{
	PortOpen(gpio);
	write(fd, s_0, strlen(s_0));
	close(fd);
}

void GPIO::PortWrite(int gpio, unsigned char value)
{
	unsigned char writeVal[1] = {value};

	PortOpen(gpio);
	write(fd, writeVal, 1);
	close(fd);
}

void GPIO::PortOpen(int gpio)
{
	s_gpio = gpio;
	// maak van s_gpio een string portNumber
	stringstream converter;
	converter << s_gpio;
	string portNumber = converter.str();

	// maak een portPath
	string portPath = "/sys/class/gpio/gpio";
	portPath.append(portNumber);
	portPath.append("/value");

	// Maak van portPath een char port
	char *port = (char*)portPath.c_str();

	fd = open(port,O_RDWR);
}
